#ifndef GRIDLAYOUT_H_
#define GRIDLAYOUT_H_

#include "Widget.h"
#include "SDLControls.h"

class Widget;

class GridLayout: public Widget {
	int colCount;
	int rowCount;
	Widget** widgets;
	int widgetCount;

	/**
	 * Obtiene y devuelve la máxima altura de todos los widgets
	 */
	int const calcMaxHeight();

	/**
	 * Obtiene y devuelve el máximo ancho de todos los widgets
	 */
	int const calcMaxWidth();

	/**
	 * Recalcula las dimensiones del layout
	 */
	void updateSize();

public:

	/**
	 * Inicializa el layout, prepara la estructura para guardar los widgets
	 */
	GridLayout(const int& colCount, const int& rowCount);

	void draw(SDL_Surface* screen, const int& x, const int& y);

	/**
	 * Agrega un widget al layout en el proximo lugar libre (de existir uno, la estrategia es tratar de llenar la primer columna de izquierda a derecha y continuar hacia abajo)
	 */
	void add(Widget* widget);

	/**
	 * Coloca el widget recibido en el lugar correspondiente del layout (advertencia, el método add funciona independientemente a este)
	 */
	void set(Widget* widget, const int& colIndex, const int& rowIndex);

	void click(const SDL_Event& event);

	void mouseIn(const SDL_Event& event);

	void mouseOut(const SDL_Event& event);

	bool isWidgetContainer();

	/**
	 * Destruye la estructura usada para guardar los widgets (mas no destruye los widgets)
	 */
	virtual ~GridLayout();
};

#endif /* GRIDLAYOUT_H_ */
